package com.ipartek.pruebas.capitulo8;

import com.ipartek.pruebas.bean.AlumnoP1;
import com.ipartek.pruebas.excepciones.ExcepcionAlumnoP1;

/**
 * Clase para probar el funcionamiento del paso de parametros por referencia y valor
 * @author ur00
 *
 */
public class PruebaMetodos {

	/**
	 * Metodo para el ejemplo de "paso por valor", el cual muestra por pantalla el parametro incrementrando su valor en 1
	 * @param valor a mostrar por pantalla
	 */
	static void incrementarValor ( int valor ){
		//valor++;
		System.out.println( "Incrementamos en 1 la edad = " + ++valor );
	}	

	/**
	 * Metodo para el ejemplo de "paso por REFERENCIA", 
	 * el cual muestra por pantalla la edad del objeto AlumnoP1 incrementando su edad en 1
	 * @param alumno instancia de la clase AlumnoP1
	 */
	static void incrementarReferencia ( AlumnoP1 alumno ) {
		try{
			int edad = alumno.getEdad();
			alumno.setEdad( edad+1 );
			System.out.println( alumno.getEdad() );
		}catch( Exception e){
			e.printStackTrace();
		}	
	}
	
	
	
	/**
	 * Metodo main para probar la clase
	 * 
	 * 
	 * @param args no vamos a pasar ningun parametro
	 */
	public static void main(String[] args) {
		
		int edad = 17;
		System.out.println("Nos debe mostrar la edad de 17 = " + edad);
		incrementarValor (edad);
		//Como pasamos el parametro edad como valor, no debe cambiar su valor
		System.out.println("Nos debe mostrar la edad de 17 = " + edad);
		
		
		AlumnoP1 p = null;
		try {
			p = new AlumnoP1("", "", "", "", 17, 0);
		} catch (ExcepcionAlumnoP1 e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println( p.toString() );
		incrementarReferencia(p);
		//Como pasamos el parametro edad como REFERENCIA, DEBE cambiar su valor
		System.out.println( p.toString() );
		
		
		//Vamos a probar a crear una variable intermedia para la instancia <AlumnoP1>p
		
		AlumnoP1 p2 = p;
		incrementarReferencia(p);
		System.out.println(p2.toString());
		
		//vamos a clonar el objeto para que no nos cambie el valor
		
		AlumnoP1 pclone = (AlumnoP1) p.clone();
		
		

	}

}
